package mine.code.day.year2021.month08;

import org.junit.Test;

import java.util.HashSet;
import java.util.Set;

/**
 * 给你一个字符串 s ，仅反转字符串中的所有元音字母，并返回结果字符串。
 * <p>
 * 元音字母包括 'a'、'e'、'i'、'o'、'u'，且可能以大小写两种形式出现。
 * <p>
 * 示例 1：
 * <p>
 * 输入：s = "hello"
 * 输出："holle"
 * 示例 2：
 * <p>
 * 输入：s = "leetcode"
 * 输出："leotcede"
 *
 * @author caijinnan
 */
public class Day19_反转字符串中的元音字母 {

    @Test
    public void run() {
        String s = "a.";
        System.out.println(reverseVowels(s));
    }


    public String reverseVowels(String s) {
        char[] chars = s.toCharArray();
        Set<Character> set = new HashSet<>();
        set.add('A');
        set.add('E');
        set.add('I');
        set.add('O');
        set.add('U');
        set.add('a');
        set.add('e');
        set.add('i');
        set.add('o');
        set.add('u');
        for (int i = 0, j = chars.length - 1; i < j; ) {
            char aChar = chars[i];
            char bChar = chars[j];
            if (set.contains(aChar) && set.contains(bChar)) {
                chars[j] = aChar;
                chars[i] = bChar;
                i++;
                j--;
            } else if (!set.contains(bChar) && set.contains(aChar)) {
                j--;
            } else if (set.contains(bChar) && !set.contains(aChar)) {
                i++;
            } else {
                i++;
                j--;
            }
        }
        return new String(chars);
    }
}
